package com.svms.save.services;

import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import com.svms.save.config.SvmsSaveConfig;
import com.svms.save.entitys.SvdaWzxx;
import com.svms.save.entitys.SvdaYhb;
import com.svms.save.entitys.SvdaZd;
import com.svms.save.entitys.SvdaZwgxx;
import com.svms.save.entitys.SvdaZwxxx;
import com.svms.save.entitys.SvdaZwxxxExample;
import com.svms.save.mapper.SvdaZwxxxMapper;
import com.svms.save.utils.SysCode;

/**
 * 置物箱信息管理
 * @author xuyang
 *
 */
public abstract class SvdaZwxxxService extends BaseService{
	@Autowired
	private SvdaZwxxxMapper zwxMapper;
	@Autowired
	private SvdaWzxxService wzxxManager;
	@Autowired
	private SvdaZwgxxService zwgxxManager;
	@Autowired
	private SvmsSaveConfig config;
	
	public int doSave(SvdaYhb yh,SvdaZwxxx zwxxx) {
		int r = 0;
		super.setEntityDefVal(yh, zwxxx);
		if(null == zwxxx.getObjectid()) {
			r = zwxMapper.insert(zwxxx);
			zwxxx.setCzbs(SysCode.CZBS_ADD);
		}else {
			r = zwxMapper.updateByPrimaryKey(zwxxx);
			zwxxx.setCzbs(SysCode.CZBS_UPDATE);
		}
		return r;
	}
	public int doSaveList(SvdaYhb yh,List<SvdaZwxxx> zwxList) {
		int rc = 0;
		for(SvdaZwxxx zwxxx : zwxList) {
			int c = this.doSave(yh, zwxxx);
			rc += c;
		}
		return rc;
	}
	/**
	 * 生成置物箱数据
	 * @param yh
	 * @param zwgxx
	 * @return
	 */
	public List<SvdaZwxxx> generateZwxxx(SvdaYhb yh,SvdaZwgxx zwgxx) {
		List<SvdaZwxxx> list = new ArrayList<SvdaZwxxx>();
		if(null != zwgxx && null != zwgxx.getZwgcs() && null != zwgxx.getZwgcgs()) {
			int cs = zwgxx.getZwgcs();
			int cgs = zwgxx.getZwgcgs();
			int count = cs * cgs;
			int aNum = 1;
			for(int i=0;i<cs;i++) {
				for(int j=0;j<cgs;j++) {
					String zrbh = generateZwxbh(count,aNum);
					int cNum = j + 1;
					int rNum = i + 1;
					String zcbh = generateZwxbh(cgs,cNum);
					SvdaZwxxx zwx = new SvdaZwxxx();
					zwx.setGlzwgbh(zwgxx.getZwgbh());
					zwx.setZwxbh(zcbh);
					String zwxwzbh = genZwxwzbh(zwgxx.getGlwzbh(),zwgxx.getZwgbh(),rNum+"",zwx.getZwxbh());
					zwx.setZwxwzbh(zwxwzbh);
					zwx.setZwxzt(SysCode.ZWXZT_KX);
					aNum++;
					list.add(zwx);
				}
			}
		}
		return list;
	}
	/**
	 * 生成
	 * @param wzbh	位置编号
	 * @param zwgbh	置物柜编号
	 * @param csbh	层数编号
	 * @param cgsbh	储物柜编号
	 * @return
	 */
	public String genZwxwzbh(String wzbh,String zwgbh,String csbh,String cgsbh) {
		wzbh = null == wzbh? "" : wzbh;
		zwgbh = null == zwgbh? "" : zwgbh;
		csbh = null == csbh? "" : csbh;
		cgsbh = null == cgsbh? "" : cgsbh;
		String zwxbh = wzbh + SysCode.ZWXFGF+zwgbh+SysCode.ZWXFGF+csbh+SysCode.ZWXFGF+cgsbh;
		return zwxbh;
	}
	/**
	 * 根据置物箱完整编号查询置物箱信息
	 * @param bh	置物箱完整编号
	 * @return
	 */
	public SvdaZwxxx getZwxxxByZwxwzbh(String bh) {
		SvdaZwxxxExample ex = new SvdaZwxxxExample();
		SvdaZwxxxExample.Criteria cri = ex.createCriteria();
		if(StringUtils.isNotBlank(bh)) {
			cri.andZwxwzbhEqualTo(bh);
			List<SvdaZwxxx> list = zwxMapper.selectByExample(ex);
			if(null != list && !list.isEmpty()) {
				return list.get(0);
			}
		}
		return null;
	}
	public String generateZwxbh(int count,int num) {
		String _c = count+"";
		String format = "%0"+_c.length()+"d";
		String res = String.format(format, num);
		return res;
	}
	/**
	 * 加载置物箱并转换为字典集合返回
	 * @return
	 */
	public List<SvdaZd> loadZwxToZd(){
		List<SvdaZd> zdList = new ArrayList<SvdaZd>();
		SvdaZwxxxExample ex = new SvdaZwxxxExample();
		SvdaZwxxxExample.Criteria cri = ex.createCriteria();
		cri.andCzbsNotEqualTo("3");
		ex.setOrderByClause("objectid asc");
		List<SvdaZwxxx> list = zwxMapper.selectByExample(ex);
		if(null != list) {
			for(SvdaZwxxx zwx : list) {
				SvdaZd zd = new SvdaZd();
				zd.setLxjp(SysCode.ZWX_ZD);
				zd.setZddm(zwx.getZwxwzbh());
				String zdmc = this.tranZwxbh(zwx.getZwxwzbh());
				if(StringUtils.isNotBlank(zdmc)) {
					zd.setZdmc(zdmc);
					zdList.add(zd);
				}
			}
		}
		return zdList;
	}
	
	public String tranZwxbh(String bh) {
		String res = "";
		if(StringUtils.isNotBlank(bh)) {
			String[] zwxbhs = bh.split(SysCode.ZWXFGF);
			if(zwxbhs.length == 4) {
				String wzbh = zwxbhs[0];
				String zwgbh = zwxbhs[1];
				String zwccsbh = zwxbhs[2];
				String zwxcgsbh = zwxbhs[3];
				SvdaWzxx wz = wzxxManager.validateWzbh(wzbh);
				SvdaZwgxx zwgxx = zwgxxManager.getZwgxx(zwgbh, wzbh);
				if(null != wz && null != zwgxx) {
					String tmp = config.getZwxmcTemplate();
					res = tmp.replace("$wzbh$", wz.getWzmc())
							.replace("$zwgbh$", zwgxx.getZwgmc())
							.replace("$zwccsbh$", zwccsbh)
							.replace("$zwxcgsbh$", zwxcgsbh);
				}
			}
		}
		return res;
	}
	
	public long countAllZwx() {
		SvdaZwxxxExample ex = new SvdaZwxxxExample();
		SvdaZwxxxExample.Criteria cri = ex.createCriteria();
		cri.andCzbsNotEqualTo("3");
		long count = zwxMapper.countByExample(ex);
		return count;
	}
}
